給定兩個稀疏矩陣,並用三元序對表示:
sparse1 = [
[5, 6, 4],
[1, 2, 3],
[2, 1, 6],
[3, 1, 9],
[4, 5, 12]
]
sparse2=[
[5,6,5],
[1,2,7],
[2,5,2],
[3,4,4],
[4,2,2],
[4,5,5]
]
相加、相乘
def add(sparse1,sparse2): #兩稀疏矩陣相加
sparse3=[]
i,j=1,1
sparse3=[[sparse1[0][0],sparse1[0][1],0]]
if sparse1[0][0] != sparse2[0][0] or sparse1[0][1] !=sparse2[0][1]:
print("兩矩陣大小不同,無法相加")
else:
while i<=sparse1[0][2] and j<=sparse2[0][2]:
if sparse1[i][0]==sparse2[j][0]:
if sparse1[i][1]==sparse2[j][1]:
sparse3.append([sparse1[i][0],sparse2[j][1],sparse1[i][2]+sparse2[j][2]])
i+=1
j+=1
sparse3[0][2]+=1
else:
if sparse1[i][1] < sparse2[j][1]:
sparse3.append([sparse1[i][0],sparse1[i][1],sparse1[i][2]])
i+=1
sparse3[0][2]+=1
else:
sparse3.append([sparse2[j][0],sparse2[j][1],sparse2[j][2]])
j+=1
sparse3[0][2]+=1
else:
if sparse1[i][0] < sparse1[j][0]:
sparse3.append([sparse1[i][0],sparse1[i][1],sparse1[i][2]])
i+=1
sparse3[0][2]+=1
else:
sparse3.append([sparse2[j][0],sparse2[j][1],sparse2[j][2]])
j+=1
sparse3[0][2]+=1
return sparse3
def multi(sparse1,sparse3) : #兩稀疏矩陣相乘
s1row=sparse1[0][0]
s1col=sparse1[0][1]
s3row=sparse3[0][0]
s3col=sparse3[0][1]
sparse4=[]
c=0 #計算總共非零項
if s1col!=s3row:
print("大小不同,無法相乘")
else:
sparse4.append([s1row,s3col,0]) #將總共的行列數append入新的matrix
for i in sparse1[1:]: #遍歷sparse1的非0元素
total=0
for j in sparse3[1:]: #遍歷sparse3的非0元素
if i[1]==j[0]: #大小相同就相乘
k=j[1]
total+=i[2]*j[2]
if total !=0:
sparse4.append([i[0],k,total])
c+=1
sparse4[0][2]=c
return sparse4
看結果
addmatrix=add(sparse1,sparse2)
print("給定兩個三元序對,相加:",addmatrix)
multimatrix=multi(sparse1,sparse3)
print("給定兩個三元序對,相乘:",multimatrix)